package model

import (
	"ginblog/utils/errmsg"
	"github.com/jinzhu/gorm"
)

// 分类表
type Category struct {
	ID   uint   `gorm:"primary_key;auto_increment" json:"id"`
	Name string `gorm: "type: varchar(20);not null" json:"name"`
}

// 查询分类是否存在
func CheckCate(name string) (code int) {
	var cate Category
	// 使用这样的 SQL 预编译技术，除了可以防止 SQL 注入外，还可以对预编译的 SQL 语句进行缓存，之后的运行就省去了解析优化 SQL 语句的过程，可以加速 SQL 的查询。
	db.Select("id").Where("name = ?", name).First(&cate)
	if cate.ID > 0 {
		return errmsg.ERROR_CATENAME_USED
	}
	return errmsg.SUCESS
}

// 新增分类
func CreateCate(data *Category) int {
	//data.Password = ScryptPw(data.Password)
	err := db.Create(data).Error
	if err != nil {
		return errmsg.ERROR
	}

	return errmsg.SUCESS
}

// 查询分类下的所有文章

// 查询分类列表
func GetCate(pageSize, pageNum int) (map[string]interface{}, int) {
	var cate []Category
	res := make(map[string]interface{})
	total := 0
	err := db.Limit(pageSize).Offset((pageNum - 1) * pageSize).Find(&cate).Count(&total).Error
	res["total"] = total
	if err != nil && err != gorm.ErrRecordNotFound {
		return nil, errmsg.ERROR
	}
	res["data"] = cate
	return res, errmsg.SUCESS
}

// 编辑分类
func EditCate(id int, data *Category) int {
	// 这个方式感觉很蠢

	var cate Category
	var maps = make(map[string]interface{})

	// 这里赋值了的就会更新
	if data.Name != "" {
		maps["name"] = data.Name
	}

	err := db.Model(&cate).Where("id = ?", id).Updates(maps).Error
	if err != nil {
		return errmsg.ERROR
	}
	return errmsg.SUCESS
}

// 删除分类
func DeleteCate(id int) int {
	err := db.Where("id=?", id).Delete(&Category{}).Error
	if err != nil {
		return errmsg.ERROR
	}
	return errmsg.SUCESS
}
